<?php
spl_autoload_register("Mvc_autoload");	//设定要使用的自动加载函数
function Mvc_autoload($c){	//$c就是要自动加载的类名！
	//先给出框架中的所有基础类的名字：
	$base_class_name = array('BaseController','BaseModel','MySQLDB','ModelFactory','Captcha');
	//in_array($v1, $arr)用于判断数据$v1是否在数组$arr中存在！
	if( in_array($c, $base_class_name) ){	//要请求的类是框架基础类
		$file = FRAME_PATH . $c . '.class.php';
	}
	//substr($str1, -n):截取字符串$str1中的最后n个字符
	else if( substr($c, -10) == "Controller" ){	//是带“controller”结尾的类
		$file = CTRL_PATH . $c . '.class.php';//载入当前控制器类
	}
	else if(substr($c, -5) == "Model"){//是带“Model”结尾的类
		$file = MODEL_PATH . $c . '.class.php';
	}
	//echo "<br />加载：$file";
	require_once $file;
}
// 确定当前的平台，控制器，动作
// 并存储于常量中，供后续使用
$default_plat = 'admin';// 默认平台
define('PLAT', !empty($_GET['p']) ? $_GET['p'] : $default_plat);//平台常量
$default_controller = 'Manage';//默认控制器
define('CONTROLLER', !empty($_GET['c']) ? $_GET['c'] : $default_controller);// 控制器常量
$default_action = 'Index';//默认动作
define('ACTION', !empty($_GET['a']) ? $_GET['a'] : $default_action);//动作常量
//我们还可以定义如下一些常量，以方便需要的地方"减少代码"而已
define("DS", DIRECTORY_SEPARATOR);//DIRECTORY_SEPARATOR是系统常量，这里只是用DS代替，简化而已
									//DIRECTORY_SEPARATOR表示“目录分割符”，可能是"/",也可能是“\”
define("ROOT", __DIR__ . DS);	//当前index.php所在路径，也是整个框架的根路径；
//echo ROOT;
define("APP_PATH", ROOT . 'application' . DS);	//平台所在总路径；
define("PLAT_PATH", APP_PATH . PLAT . DS);	//当前平台所在总路径；
define("CTRL_PATH", PLAT_PATH . 'controller' . DS);	//当前控制器类所在总路径；
define("MODEL_PATH", PLAT_PATH . 'model' . DS);	//当前模型类所在总路径；
define("VIEW_PATH", PLAT_PATH . 'view' . DS);	//当前视图文件所在总路径；
define('FRAME_PATH', ROOT . 'framework' . DS);	//框架基础类所在路径
define('WEB_SOURCE_PATH', ROOT . 'web' . DS . PLAT . DS);	//平台所使用的资源文件夹路径

// 实例化控制器类，并调用动作方法
$controller_name = CONTROLLER . 'Controller';
$ctrl_obj = new $controller_name();	//可变类名
// Mvc_autoload('AdminContoller');PHP核心程序做得
$action = ACTION . "Action";
$ctrl_obj->$action();//此时$action称为“可变方法”——就是可变函数！！！

